#include "widget.h"
#include "ui_widget.h"
#include <QLabel>//需要包含这个头文件
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //通过代码方式创建控件对象
    //Qt中，推荐在堆上进行创建对象
    QLabel*label=new QLabel(this);
    //QLable标签：界面上一个用来显示内容的字符串控件
    //一般在创建对象时，需要给它传递this指针，即给当前这个label对象指定一个父对象
    //这个设定是对象树的设定，Qt中的所有控件都在这个对象树中，指定这个QLabel对象是Widget对象的孩子节点
    //QLabel对象的父节点是Widget对象

    //设置控件中，要显示的文本内容
    label->setText("代码显示示例");
    //这里需要传递一个const QString&对象
    //QString QList Qvector这些都是Qt早年间自己设计的基础类
    //当前，使用Qt设计的基础类或者C++中的基础类都可以，这两套基础类之间也可以很方便的相互进行转换
    //在Qt api(底层调用)中，使用的是Qt自己设计的基础类
    //在后续的Qt学习中，使用Qt自己设计的一套基础类较多

    //QString内部已经对于字符编码做了处理，string没有这样的处理

    //label->setText("代码显示示例");
    //label->setText(QString("代码显示示例"));
    //这两种写法都行
    //在QString中，也提供了C风格字符串作为参数的构造函数
    //不显示构造QString也可以，C风格字符串也会隐式构造QString对象
    //QString对应的头文件，已经被很多Qt内置的其他类间接包含了，所以不需要显示包含QString头文件

    //通过代码创建的QLabel显示控件，默认显示在左上角


    //QLabel*label=new QLabel(this);
    //这里用户不进行手动释放，不会出现内存泄露问题
    //label对象会在合适的时候被析构释放
    //之所以这个对象可以自动被释放，是因为用户将这个对象挂到了对象树上

    //前端开发(网页开发)也涉及到类似的对象树(称为：DOM)本质上也是一个树形结构(多叉树)，通过树形结构把界面上的各种元素组织起来
    //Qt中也类似，也搞了一个对象树，多叉树，把界面上的各种元素给组织起来了

    //通过对象树这个树形结构，就把界面上要显示的这些控件对象都组织起来了
    //使用对象树，就可以把这些内容组织起来，最主要的目的，就是为了能够在合适的时机(窗口被关闭/被销毁)，将这些对象统一进行释放
    //对象树上的这些对象，统一销毁是最合适的，如果某个对象提前销毁，此时，就导致对应的控件不会再界面上显示.

    //Qt中使用new的方式创建对象，将对象空间开辟到堆上，也就是为了把这个对象的生命周期交给Qt的对象树来进行统一管理
    //如果将对象开辟到栈上，那么此对象的生命周期就不受对象树的管理，就可能会存在对象控件提前释放的问题
}

Widget::~Widget()
{
    delete ui;
}

//一般通过代码来构造界面的时候，通常会把构造界面的代码放到Widget/MainWindow 的构造函数中


























